package br.com.saeng2D.objeto;

import java.util.ArrayList;
import java.util.List;

//Um tipo abstrato que permite muitas implementações e com suporte a filhos
public abstract class AbstratoContainer extends AbstratoObjeto {
	protected List<AbstratoObjeto> filhos = new ArrayList<AbstratoObjeto>();

	public AbstratoContainer(AbstratoObjeto pai, String descricao, int x, int y, int largura, int altura) {
		super(pai, descricao, x, y, largura, altura);
	}

	public void adicionarFilho(AbstratoObjeto objeto) {
		if (objeto == null) {
			return;
		}
		if (objeto.pai == this) {
			return;
		}
		if (objeto.pai instanceof AbstratoContainer) {
			((AbstratoContainer) objeto.pai).excluirFilho(objeto);
		}
		objeto.pai = this;
		filhos.add(objeto);
	}

	public boolean excluirFilho(AbstratoObjeto objeto) {
		if (objeto == null) {
			return false;
		}
		if (objeto.pai != this) {
			return false;
		}
		objeto.pai = null;
		return filhos.remove(objeto);
	}

	public final boolean contemFilhos() {
		return filhos.size() > 0;
	}

	public final AbstratoObjeto getFilho(int indice) {
		return filhos.get(indice);
	}

	public final int getQtdFilhos() {
		return filhos.size();
	}

	public final void limparFilhos() {
		filhos.clear();
	}

	public final List<AbstratoObjeto> getObjetos() {
		return filhos;
	}
}